// pages/discuss/discuss.js
import { timeago } from '../../utils/getTimeAge';
import { getUserInfo } from '../../utils/userInfo';
import Toast from '@vant/weapp/toast/toast';
import Notify from '/@vant/weapp/notify/notify';
Page({

  /**
   * 页面的初始数据
   */
  data: {
    talkArr: Array,
    skipNum: 0,
    limitNum: 5,
    currentPage: 0, // 当前是第几页
    isShowOnReachTips: false, // 上拉加载的提示，是否显示
    isMoreDataTips: false, // 是否以及获取了所有的数据了
    startOnReachBottom: false, // 目前是否时上拉操作
    empty: false, // 空页面
    myselfUid: getUserInfo()._id, // 当前我自己的uid，与获取讨论列表里的uid区分开发
    likeArr: [], // 获取点赞列表
  },

  // 跳转至讨论详情页
  toCommentPage(e) {
    // point是一个锚点，目的是跳转页面后，显示在指定的位置
    const { tid, nickname, point } = e.currentTarget.dataset;
    wx.navigateTo({
      url: `../../packageC/pages/comment/comment?tid=${tid}&nickname=${nickname}&point=${point}`,
    })
  },

  // 点击头像，跳转到用户发布的信息页
  toUserDiscussDetail(e) {
    const { uid, avatar, nickname } = e.currentTarget.dataset;
    wx.navigateTo({
      url: `../userDiscussDetail/userDiscussDetail?uid=${uid}&avatar=${avatar}&nickname=${nickname}`,
    })
  },

  /**
   * 点击单个图片进行预览
   */
  onPreviewImg: function (event) {
    var src = event.currentTarget.dataset.src;//获取data-src
    var imgList = event.currentTarget.dataset.list;//获取data-list
    //图片预览
    wx.previewImage({
      current: src, // 当前显示图片的http链接
      urls: imgList // 需要预览的图片http链接列表
    })
  },

  /** 
   * 去发布帖子 onCreatPost
   */
  onCreatPost(e) {
    if (getUserInfo()) {
      wx.navigateTo({
        url: '../../packageC/pages/creatPost/creatPost',
      })
    } else {
      Notify({ type: 'danger', message: '请先登录' });
    };
  },

  /**
   * 删除列表中的一项
   */
  delListItem(e) {
    const { tid } = e.currentTarget.dataset;
    const { talkArr } = this.data;
    const newTalkArr = talkArr.filter(item => {
      return item._id !== tid;
    });
    this.setData({
      talkArr: [...newTalkArr],
    }, () => {
      if (newTalkArr.length === 0) {
        this.setData({
          empty: true,
        });
      }
    });
  },

  /**
   * 获取所有的讨论数据
   */
  getTalkData: async function (skipNum, limitNum) {
    const that = this;

    // 当前是否进行了上拉加载更多的操作
    const { startOnReachBottom, talkArr, currentPage } = that.data;

    if (startOnReachBottom) {
      skipNum = currentPage * limitNum; // 重新获取数据的位置
      const res = await that.useGetTalkData(skipNum, limitNum);
      // 将时间戳变化为，时间差
      let newTalkArr = res.map(item => {
        item.creatDate = timeago(item.creatDate)
        return item;
      });
      // 判断这一次加载出来的数据，满不满足11条，不满足的话，说明以及没有更多了
      that.setData({
        talkArr: [...talkArr, ...newTalkArr],
        currentPage: currentPage + 1,
      });
      if (newTalkArr.length < 5) {
        that.setData({
          isShowOnReachTips: false,
          isMoreDataTips: true,
        })
      }
    } else {
      // 初始获取错题列表
      if (currentPage === 0) {
        const res = await that.useGetTalkData(skipNum, limitNum);
        // 将时间戳变化为，时间差
        let newTalkArr = res.map(item => {
          item.creatDate = timeago(item.creatDate)
          return item;
        });
        that.setData({
          talkArr: [...newTalkArr],
          currentPage: currentPage + 1,
        }, () => {
          if (newTalkArr.length === 0) {
            // 说明页面是空的，没有数据
            that.setData({
              empty: true,
            })
          }
        });
      }
    };

    // 如果获取到的条数，不超过5条，上拉加载的提示不能显示出来
    if (talkArr.length <= 5) {
      that.setData({
        isShowOnReachTips: false,
      })
    };

    console.log(that.data.talkArr);
  },

  useGetTalkData: async (skipNum, limitNum) => {
    return new Promise((reslove) => {
      wx.cloud.callFunction({
        name: 'reqTalkAPI',
        data: {
          scene: 'GET_ALL_TALK',
          skipNum,
          limitNum
        }
      }).then(res => {
        reslove(res.result.data)
      })
    })
  },

  // 点赞和取消点赞
  onClickLike(e) {
    if (getUserInfo()) {
      const that = this;
      // 首先要判断，是点赞还是取消点赞
      const { islike, tid } = e.currentTarget.dataset;
      const uid = getUserInfo()._id;
      const { talkArr } = that.data;
      if (!islike) {
        // 说明要进行点赞操作
        wx.cloud.callFunction({
          name: 'reqTalkAPI',
          data: {
            scene: 'DEFINE_LIKE',
            tid,
            uid,
          }
        }).then(res => {
          console.log(res);
          const { update1, update2 } = res.result;
          if (update1.stats.updated === 1 && update2.stats.updated === 1) {
            Toast({
              type: 'success',
              message: '点赞成功',
              duration: 1000,
            });
            // 点赞成功，要实现页面上实时刷新
            let newTalkArr = talkArr;
            newTalkArr.forEach(item => {
              if (item._id === tid) {
                item.likeArr.push(uid);
              }
            });
            that.setData({
              talkArr: [...newTalkArr],
            });
          } else {
            Toast({
              type: 'fail',
              message: '点赞成功',
              duration: 1000,
            });
          }
        })
      } else {
        // 说明要进行取消点赞
        wx.cloud.callFunction({
          name: 'reqTalkAPI',
          data: {
            scene: 'CANCEL_LIKE',
            tid,
            uid,
          }
        }).then(res => {
          console.log(res);
          const { update1, update2 } = res.result;
          if (update1.stats.updated === 1 && update2.stats.updated === 1) {
            Toast({
              type: 'success',
              message: '取消成功',
              duration: 1000,
            });
            // 取消成功，要实现页面上实时刷新
            let newTalkArr = talkArr;
            newTalkArr.forEach(item => {
              if (item._id === tid) {
                item.likeArr = item.likeArr.filter(uidItem => {
                  return uidItem !== uid;
                });
              };
            });
            that.setData({
              talkArr: [...newTalkArr],
            });
          } else {
            Toast({
              type: 'success',
              message: '取消失败',
              duration: 1000,
            });
          }
        })
      }
    } else {
      Notify({ type: 'danger', message: '请先登录' });
    };
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {
    if (!getUserInfo()) {
      Notify({ type: 'danger', message: '请先登录' });
    } else {
      // 第一次获取的数据
      const { skipNum, limitNum } = this.data;
      this.getTalkData(skipNum, limitNum);
    }
  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {
    const that = this;
    // 重新刷新整个页面
    that.setData({
      currentPage: 0,
      startOnReachBottom: false,
    }, () => {
      that.getTalkData(0, 5);
    });
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {
    const that = this;
    // 重新刷新整个页面
    setTimeout(() => {
      wx.stopPullDownRefresh() //停止下拉刷新
      that.onShow();
      Toast('刷新成功');
    }, 2000)
  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {
    const that = this;
    that.setData({
      isShowOnReachTips: true,
      startOnReachBottom: true,
    }, () => {
      // 第一次获取的数据
      const { skipNum, limitNum } = that.data;
      that.getTalkData(skipNum, limitNum);
    })
  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {

  }
})